Allow IRQ balancing to be disabled with 'noirqbalance'
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 14 Jul 2005 10:37:49 +0000 (10:37 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 14 Jul 2005 10:37:49 +0000 (10:37 +0000)
boot parameter.
Signed-off-by: Keir Fraser <keir@xensource.com>
docs/src/user.tex
xen/arch/x86/irq.c

index b3a2786979b7dbbad453c2f9ce9b8c750dca0948..f15f88a8463ed8139c43016a98868593a08e5fb6 100644 (file)
@@ -1692,6 +1692,11 @@ editing \path{grub.conf}.
 \item [watchdog ] 
  Enable NMI watchdog which can report certain failures. 
 
+\item [noirqbalance ] 
+ Disable software IRQ balancing and affinity. This can be used on
+ systems such as Dell 1850/2850 that have workarounds in hardware for
+ IRQ-routing issues.
+
 \item [badpage=$<$page number$>$,$<$page number$>$, \ldots ] 
  Specify a list of pages not to be allocated for use 
  because they contain bad bytes. For example, if your
index 92b51f7d6ef458425f77907911698b9724aa3ba3..c46811fd6141cbb2ae01e0c98bc62946d37cd2d5 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <xen/config.h>
+#include <xen/init.h>
 #include <xen/errno.h>
 #include <xen/event.h>
 #include <xen/irq.h>
 #include <asm/current.h>
 #include <asm/smpboot.h>
 
+/* opt_noirqbalance: If true, software IRQ balancing/affinity is disabled. */
+static int opt_noirqbalance = 0;
+boolean_param("noirqbalance", opt_noirqbalance);
+
 irq_desc_t irq_desc[NR_IRQS];
 
 static void __do_IRQ_guest(int vector);
@@ -240,7 +245,7 @@ int pirq_guest_bind(struct vcpu *v, int irq, int will_share)
 
         /* Attempt to bind the interrupt target to the correct CPU. */
         cpu_set(v->processor, cpumask);
-        if ( desc->handler->set_affinity != NULL )
+        if ( !opt_noirqbalance && (desc->handler->set_affinity != NULL) )
             desc->handler->set_affinity(vector, cpumask);
     }
     else if ( !will_share || !action->shareable )